/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BL;

import BE.*;
import java.util.List;
import java.util.ArrayList;
/**
 *
 * @author Elessar
 */
public class BLTwoOpt {
//    
//    public static List<BENodo> TwoOpt (List<BENodo> grafo, List<BENodo> SolucionInicial)
//    {
//        int cantNodos = SolucionInicial.size();
//        List<BEArco> listaArcos = getListaArcos (SolucionInicial);
//        
//        for (int p = 0; p < cantNodos; p++)
//        {
//            BEArco maxArco = listaArcos.get(0);
//            int i, j, l, k, dist_ij, dist_lk, dist_il, dist_jk;
//                
//            i= maxArco.getNodo1();
//            j= maxArco.getNodo2();
//            dist_ij = maxArco.getDistancia();
//            
//            for (int q = 1; q < listaArcos.size(); q++)
//            {
//                l= listaArcos.get(q).getNodo1();
//                k= listaArcos.get(q).getNodo2();
//                dist_lk = listaArcos.get(q).getDistancia();
//                
//                //Se evalua la nueva solucion
//                dist_il = getDistanciaGrafo(grafo,i,l);
//                dist_jk = getDistanciaGrafo(grafo,j,k);
//                //Se comparan los costos (distancias)                
//                if (dist_ij+dist_lk > dist_il+dist_jk && dist_il!=0 && dist_jk!=0)
//                {
////                    int m;
////                    for (m=0;m<listaArcos.size();m++)
////                        if (listaArcos.get(m).getIdNodoHijo().equals(i+" "+j))
////                            break;
////                    listaArcos.remove(m);
////                    
////                    for (m=0;m<listaArcos.size();m++)
////                        if (listaArcos.get(m).getIdNodoHijo().equals(l+" "+k))
////                            break;
////                    listaArcos.remove(m);
//                    listaArcos.remove(0);
//                    listaArcos.remove(q-1);
//                    
//                    BEArco arcoXY = new BEArco(i,l,dist_il);                    
//                    listaArcos.add(arcoXY);
//                    
//                    arcoXY = new BEArco(j,k,dist_jk);
//                    listaArcos.add(arcoXY);
//                    //deleteListaArcos(i+" "+j);
//                    //deleteListaArcos(l+" "+k);
//                    //insertListaArcos(i+" "+l,dist_il);
//                    //insertListaArcos(j+" "+k,dist_jk);
//                    ordenar(listaArcos);
//                    break;
//                }
//            }
//        }
//        
//        //return listaArcos;
//        return presentarRuta(listaArcos);
//    }
//    
//    public static List<BEArco> getListaArcos(List<BENodo> SolucionInicial)
//    {
//        List<BEArco> listaArcos = new ArrayList<BEArco>();
//        //BENodo nodo = null;
//        BEArco arco=null;
//        int nodoA;
//        int nodoB;
//        int distancia = 0;
//
//        for (int i=0;i<SolucionInicial.size()-1;i++)
//        {
//                nodoA = SolucionInicial.get(i).getIdNodo();
//                nodoB = SolucionInicial.get(i+1).getIdNodo();
//                distancia = SolucionInicial.get(i+1).getDist();
//                arco = new BEArco(nodoA,nodoB,distancia);
//                listaArcos.add(arco);
//        }
//        
//        listaArcos = ordenar(listaArcos);
//        return listaArcos;
//    }
//    
//    public static List<BEArco> ordenar (List<BEArco> arcos)
//    {
//        BEArco arcoAux = null;
//        
//        for (int i=0;i<arcos.size()-1;i++)
//            for(int j=1;j<arcos.size();j++)
//                if (arcos.get(i).getDistancia()<arcos.get(j).getDistancia())
//                {
//                    arcoAux = arcos.get(i);
//                    arcos.set(i, arcos.get(j));
//                    arcos.set(j, arcoAux);
//                }
//        return arcos;
//    }
//    
//   
//    public static int getDistanciaGrafo (List<BENodo> grafo, int nodo1, int nodo2)
//    {
//        int distancia=0;
//        for (int i=0; i<grafo.size(); i++)
//        {
//            if (grafo.get(i).getIdNodo()==nodo1)
//            {
//                for (int j=0; j<grafo.get(i).getVecinos().size(); j++)
//                    if (grafo.get(i).getVecinos().get(j).getIdNodo()==nodo2)
//                    {
//                        distancia=grafo.get(i).getVecinos().get(j).getDist();
//                        break;
//                    }
//                break;
//            }
//        }
//        return distancia;
//    }
//    
//    public static List<BENodo> presentarRuta (List<BEArco> listaArcos)
//    {
//        List<BENodo> rutaFinal = new ArrayList<BENodo>();
//        int distanciaSig=0;
//        for (int i=0; i<listaArcos.size(); i++)
//        {
//            BENodo nodoAux = new BENodo();
//            //String [] auxStr = listaArcos.get(i).getIdNodoHijo().split(" ");
//            nodoAux.setIdNodo(listaArcos.get(i).getNodo1());
//            nodoAux.setDist(distanciaSig);
//            distanciaSig=listaArcos.get(i).getDistancia();
//            rutaFinal.add(nodoAux);
//            if (i==listaArcos.size()-1) 
//            {
//                BENodo nodoAux2 = new BENodo();
//                nodoAux2.setIdNodo(listaArcos.get(i).getNodo2());
//                nodoAux2.setDist(distanciaSig);
//                rutaFinal.add(nodoAux2);
//            }
//        }        
//        return rutaFinal;
//    }    
}
